/*给定一个含有 n 个正整数的数组和一个正整数 target 。
* 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ，
* 并返回其长度。如果不存在符合条件的子数组，返回 0 。
*
* 输入：target = 7, nums = [2,3,1,2,4,3]
* 输出：2
* 解释：子数组 [4,3] 是该条件下的长度最小的子数组。
* */

package newcoder.SlidingWindow_2;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

public class Leetcode209 {

    public static void main(String[] args) {

        Leetcode209 obj = new Leetcode209();
        int target = 7;
        int[] nums = {2,3,1,2,4,3};
        System.out.println(obj.minSubArrayLen(target, nums));
    }

    public int minSubArrayLen(int target, int[] nums){

        int sum = 0, len = nums.length, min = Integer.MAX_VALUE;
        Queue<Integer> queue = new LinkedList<Integer>();
        for (int i = 0; i < len; i++) {
            queue.offer(nums[i]);
            sum += nums[i];
            while (sum >= target){
                min = Math.min(queue.size(), min);
                sum -= queue.poll();
            }
        }
        return min == Integer.MAX_VALUE ? 0:min;
    }
}
